from D5Core.D5Common import *
from D5Core.D5Lights.Details.D5Light import D5Light

class PointLight(D5Light):
    """
    点光源类。
    
    这个类表示一个点状光源，从一个中心点向各个方向均匀发射光线。
    
    Attributes:
        source_radius (float): 光源的半径，用于模拟非单点光源的效果。
    """
    _attrs = {
        "source_radius": {
            "from": float,
            "to": str,
            "default": 0.0
        },
    }

    def __init__(self, dict_data):
        """
        初始化点光源实例。
        
        Args:
            dict_data (dict): 包含光源属性的字典数据。
        """
        super().__init__(dict_data)

    @staticmethod
    def create_light(locations:list[Vector3],grounp:str):
        """
        创建一个新的点光源实例。
        
        Args:
            location (Vector3): 光源的位置。
            grounp (str): 光源所属的组。
            
        Returns:
            PointLight: 新创建的点光源实例。
        """
        model_datas = D5Light.create_light(LightType.POINT_LIGHT,locations, grounp)
        models = []
        for model_data in model_datas:
            models.append(PointLight(model_data))
        return models


    def get_source_radius(self)->float:
        """
        获取光源半径。
        
        Returns:
            float: 光源的半径值。
        """
        ...
    
    def set_source_radius(self, value:float, event)->bool:
        """
        设置光源半径。
        
        Args:
            value (float): 要设置的光源半径值。
            event: 触发此设置操作的事件对象。
            
        Returns:
            bool: 设置是否成功。
        """
        ...


PointLight._attrs = {**D5Light._attrs, **PointLight._attrs}
D5Light._generate_methods()